/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AplicacionMVC;

import funciones.DatosServidor;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 */
public class HebraLectoraBd extends Thread{
    private BaseDatos bd;
    private DatosServidor serv;
    private boolean salir;
    
    HebraLectoraBd(BaseDatos bd, DatosServidor serv){
        this.bd=bd;
        this.serv=serv;
        salir=false;
    }
    
    HebraLectoraBd(BaseDatos bd){
        this.bd=bd;
        salir=false;
    }
    
    public void setServidor(DatosServidor serv){
        this.serv=serv;
    }
    
    public DatosServidor getServidor(){
        return serv;
    }
    public boolean getSalir(){
        return salir;
    }
    public void setSalir(boolean salir){
        this.salir=salir;
    }
    @Override
    public void run(){
        while(!salir){
            try {
                leerTratamientos();    // lee la BD y crea las hebrasTratamiento oportunas
                Thread.sleep(5*60*1000);  // se duerme 5 minutos
            } catch (InterruptedException ex) {
                Logger.getLogger(HebraLectoraBd.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(HebraLectoraBd.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(HebraLectoraBd.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void leerTratamientos() throws SQLException, IOException{
        // consulta de la tabla OTROS
//        ResultSet resultado  = bd.consultar("select email, to_char(inicio,'dd/mm/yyyy') inicio, to_char(fin,'dd/mm/yyyy') fin, frecuencia, ot.comentario"
//                                + " from otros ot, pacientes pa"
//                                + " where to_char(fin,'yyyy/mm/dd') >= to_char(sysdate,'yyyy/mm/dd')"   
//                                + " and  to_char(inicio,'yyyy/mm/dd') <= to_char(sysdate,'yyyy/mm/dd')" // solo obtiene los resultados cuando la fecha este entre inicio y fin
//                                + " and (cancelada is null or cancelada = 0)"
//                                + " and (ot.dni = pa.dni and ot.nss = pa.nss)");         
//        while(resultado.next()){
//            String email = resultado.getString("email");
//            String inicio = resultado.getString("inicio");
//            String fin = resultado.getString("fin");
//            int freq = resultado.getInt("frecuencia");
//            String texto = resultado.getString("comentario");
//            if(!HebraTratamiento.listadoHebras.contains(email+inicio+fin+freq+texto)){ // se comprueba si existe la hebra
//                HebraTratamiento hebra = new HebraTratamiento(serv,email,inicio,fin,freq,texto); // y se crea la hebra
//                hebra.start();
//            }
//        }
        
         // consulta de la tabla CURAS
        ResultSet resultado  = bd.consultar("select email, to_char(inicio,'dd/mm/yyyy') inicio, to_char(fin,'dd/mm/yyyy') fin, frecuencia, cu.cura"
                        + " from pacientes pa, curas cu"
                        + " where to_char(fin,'yyyy/mm/dd') >= to_char(sysdate,'yyyy/mm/dd')"
                        + " and  to_char(inicio,'yyyy/mm/dd') <= to_char(sysdate,'yyyy/mm/dd')"
                        + " and (cancelada is null or cancelada = 0)"
                        + " and (cu.dni = pa.dni and cu.nss = pa.nss)");     
 
        while(resultado.next()){
            String email = resultado.getString("email");
            String inicio = resultado.getString("inicio");
            String fin = resultado.getString("fin");
            int freq = resultado.getInt("frecuencia");
            String texto = resultado.getString("cura");
            if(!HebraTratamiento.listadoHebras.contains(email+inicio+fin+freq+texto)){ // se comprueba si existe la hebra
                HebraTratamiento hebra = new HebraTratamiento(serv,email,inicio,fin,freq,texto); // y se crea la hebra
                hebra.start();
            }
        }
        
         // consulta de la tabla MEDICINAS
        resultado  = bd.consultar("select email, to_char(inicio,'dd/mm/yyyy') inicio, to_char(fin,'dd/mm/yyyy') fin, frecuencia, mo.nombre, mo.foto"
                                + " from medicamento mo, pacientes pa, medicinas me"
                                + " where to_char(fin,'yyyy/mm/dd') >= to_char(sysdate,'yyyy/mm/dd')"
                                + " and  to_char(inicio,'yyyy/mm/dd') <= to_char(sysdate,'yyyy/mm/dd')"
                                + " and (cancelada is null or cancelada = 0)"
                                + " and (me.dni = pa.dni and me.nss = pa.nss)"
                                + " and (me.idmedicamento = mo.idmedicamento)");         
        while(resultado.next()){
            String email = resultado.getString("email");
            String inicio = resultado.getString("inicio");
            String fin = resultado.getString("fin");
            int freq = resultado.getInt("frecuencia");
            String texto = resultado.getString("nombre");
            String foto = resultado.getString("foto");
             if(!HebraTratamiento.listadoHebras.contains(email+inicio+fin+freq+texto)){ // se comprueba si existe la hebra
                HebraTratamiento hebra = new HebraTratamiento(serv,email,inicio,fin,freq,texto,foto); // y se crea la hebra
                hebra.start();
            }
        }
    }
    
}